
import { requestClient } from '#/api/request';

// 报名状态枚举
export enum RegistrationStatus {
  DRAFT = 0,        // 草稿
  PENDING = 1,      // 待审核
  APPROVED = 2,     // 通过
  REJECTED = 3      // 驳回
}

// 创建团队信息接口类型
export interface CreateTeamInfo {
  id?: string; // 团队ID
  groupId: string; // 组别ID
  compId: string; // 大赛ID
  name: string; // 团队名称
  type: string; // 团队类型（团队性质）
  organName: string; // 单位名称
  city: string; // 城市
  province: string; // 省份
  img?: string; // 图片URL或文件名
}

// 更新团队信息接口类型
export interface UpdateTeamInfo {
  id: string; // 团队ID
  groupId: string; // 组别ID
  compId: string; // 大赛ID
  name: string; // 团队名称
  type: string; // 团队类型（团队性质）
  organName: string; // 单位名称
  city: string; // 城市
  province: string; // 省份
  img: string; // 图片URL或文件名
}

// 创建团队响应类型
export interface CreateTeamResponse {
  id: string;
  [key: string]: any;
}

// 报名信息接口类型
export interface RegistrationInfo {
  id: string;
  compName: string; // 大赛名称
  trackName: string; // 所属赛题
  groupName: string // 赛事组别
  teamName: string // 团队名称
  organizationName: string // 所属单位
  worksName: string // 作品名称
  createTime: string // 报名时间
  registrationStatus: string // 报名状态
  worksStatus: string // 作品状态
}

// 查询参数类型
export interface RegistrationInfoQueryParams {
  teamId?: string;
  compId?: string;
  groupId?: string;
  teamName?: string;
  organizationName?: string;
  worksName?: string;
  registrationStatus?: string;
  worksStatus?: string;
  curPage: number;
  pageSize: number;
}


// 团队成员参数类型
export interface TeamMembersQueryParams {
  teamId: string;
  curPage: number;
  pageSize: number;
}

// 团队成员类型
export interface TeamMember {
  id: string;
  teamId: string;
  name: string;
  phone: string;
  email: string;
  role: string;
  position: string;
  photoName: string;
}

// 团队成员响应类型
export interface TeamMembersResponse {
  data: TeamMember[];
  pageInfo: {
    totalRows: number;
    curPage: number;
    pageSize: number;
  };
}

// 分页响应类型
export interface RegistrationInfoPageResponse {
  data: RegistrationInfo[];
  pageInfo: {
    totalRows: number;
    curPage: number;
    pageSize: number;
  };
}

/**
 * 获取报名信息分页列表
 */
export async function getRegistrationInfoPageApi(params: RegistrationInfoQueryParams): Promise<RegistrationInfoPageResponse> {
  return requestClient.get('/match/sys/get-registration-info', { params });
}

// 导出参数类型
export interface ExportTeamInfoParams {
  params: RegistrationInfoQueryParams;
  idList: string[];
}

/**
 * 导出团队信息
 */
export async function exportRegistrationInfoApi(params: ExportTeamInfoParams): Promise<Blob> {
  return requestClient.get('/match/sys/export-registration-info', {
    params,
    responseType: 'blob',
    headers: {
      'Accept': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel'
    }
  });
}
/**
 * 获取团队成员
 */
export async function getTeamMembersApi(data: TeamMembersQueryParams): Promise<TeamMembersResponse> {
  return requestClient.get('/match/get-team-members-info', { params: data });
}

// 大赛下拉列表响应类型
export interface Match {
  id: string;
  matchName: string;
}

/**
 * 获取大赛下拉列表
 */
export async function getMatchListApi(): Promise<Match[]> {
  return requestClient.get('/match/query-match-list');
}

// 赛事组别查询参数类型
export interface GroupListQueryParams {
  compId: string;
  curPage?: number;
  pageSize?: number;
}

// 赛事组别响应类型
export interface GroupListResponse {
  data: Group[];
}

// 赛事组别类型

export interface Group {
  id: string;
  name: string;
}


/**
 * 查询赛事组别
 */
export async function getGroupListApi(data: GroupListQueryParams): Promise<GroupListResponse> {
  return requestClient.get('/match/get-comp-group-page', { params: data });
}

// 所属赛题查询参数类型
export interface TrackListQueryParams {
  compId?: string;
  groupId?: string;
  curPage?: number;
  pageSize?: number;
  releaseStatus?: string;
}

// 所属赛题响应类型
export interface TrackListResponse {
  data: Track[];
}

// 所属赛题类型
export interface Track {
  id: string;
  name: string;
}

/**
 * 获取所属赛题
 */
export async function getTrackListApi(params: TrackListQueryParams): Promise<TrackListResponse> {
  return requestClient.get('/match/get-comp-track-page', { params });
}

// 获取报名信息数量响应类型
export interface RegistrationInfoCountResponse {
  regTotalCount: number;
  worksSubmitCount: number;
  worksAuditCount: number;
}

/**
 * 获取报名信息数量
 */
export async function getRegistrationInfoCountApi(params: RegistrationInfoQueryParams): Promise<RegistrationInfoCountResponse> {
  return requestClient.get('/match/sys/get-registration-count', { params });
}

// 新增内部报名参数类型
export interface CreateRegistrationInfoParams {
  compId: string; // 大赛名称
  groupId: string; // 赛事组别
  trackId: string; // 所属赛题
  teamId: string; // 团队名称
  worksName: string; // 作品名称
  worksIntro: string; // 作品简介
  worksIntroduceFile: string; // 作品讲解课件
  videoAssetId: string; // 作品介绍视频
}


/**
 * 新增内部报名
 */
export async function createRegistrationInfoApi(params: CreateRegistrationInfoParams): Promise<any> {
  return requestClient.post('/match/sys/create-registration-info', params);
}

// 作品审核参数类型
export interface WorksReviewParams {
  id: string;
  reviewStatus: string; // 作品审核状态 2，通过, 3 驳回
  worksLastTime?: string | null; // 作品最后提交时间	
  bonusPoint?: number | null; // 是否额外加积分	
  reviewOpinion: string; // 作品审核意见
}

/**
 * 作品审核
 */
export async function worksReviewApi(data: WorksReviewParams): Promise<any> {
  return requestClient.patch('/match/sys/works-review', data);
}

// 报名审核参数类型
export interface RegistrationReviewParams {
  id: string;
  reviewStatus: string; // 报名审核状态 2，通过, 3 驳回
  reviewOpinion: string; // 报名审核意见
}

/**
 * 报名审核
 */
export async function registrationReviewApi(data: RegistrationReviewParams): Promise<any> {
  return requestClient.patch('/match/sys/registration-review', data);
}

/**
 * 创建团队信息
 */
export async function createTeamInfoApi(data: CreateTeamInfo): Promise<CreateTeamResponse> {
  return requestClient.post('/match/create-team-info', data);
}

/**
 * 更新团队信息
 */
export async function updateTeamInfoApi(data: UpdateTeamInfo): Promise<any> {
  return requestClient.post('/match/update-team-info', data);
}

// 用户端创建报名信息参数类型
export interface EduRegWorksVO {
  id?: string; // 报名ID
  teamId?: string; // 团队id
  worksName?: string; // 作品名称
  worksIntro?: string; // 作品简介
  worksCopyright?: string; // 著作权
  worksPatent?: string; // 专利信息
  accessChannel?: string; // 获取渠道
  videoAssetId?: string; // 视频id
  listedDocName?: string; // 上市证明材料
  worksIntroduceFile?: string; // 作品介绍文件
  registrationReviewPeople?: string; // 报名审核人员
  registrationReviewTime?: string; // 报名审核时间
  registrationReviewOpinion?: string; // 报名审核意见
  worksReviewPeople?: string; // 作品审核人员
  worksReviewTime?: string; // 作品审核时间
  worksReviewOpinion?: string; // 作品审核意见
  compId?: string; // 大赛id
  trackId?: string; // 赛道id
  registrationStatus?: number; // 报名状态: 0-草稿，1-待审核，2-通过，3-驳回
  worksStatus?: number; // 作品状态
  dgEnterpriseCertificate?: string; // 东莞企业材料证明
  receivablesAccount?: string; // 收款账号
  accountName?: string; // 账号名
  bankDeposit?: string; // 开户行
  companyAuthCertificate?: string; // 公司授权证明材料
  worksLastTime?: string; // 作品重新提交截止时间
  bonusPoint?: boolean; // 是否额外加分
  groupId?: string; // 分组ID
  groupName?: string; // 分组名称
  trackName?: string; // 赛题名称
  teamName?: string; // 团队名称
  compName?: string; // 大赛名称
  organizationName?: string; // 所属单位
  createTime?: string; // 报名时间
  trackMonth?: string; // 所属月份
  idList?: string[]; // 报名id列表
}

// API响应返回码类型
export interface ResultDataReturnCode {
  status: number; // 状态码
  message: string; // 信息
  data: string; // 数据
  timestamp: number; // 时间戳
}

/**
 * 用户端创建报名信息
 */
export async function createUserRegistrationInfoApi(eduRegWorksVO: EduRegWorksVO): Promise<ResultDataReturnCode> {
  return requestClient.post('/match/user/create-registration-info', eduRegWorksVO);
}

/**
 * 新增团队成员
 */
export async function addTeamMemberApi(data: AddTeamMemberInfo): Promise<any> {
  return requestClient.post('/match/add-team-member', data);
}

// 团队成员信息类型
export interface TeamMemberInfo {
  id: string;
  teamId: string;
  name: string;
  role: string;
  phone: string;
  email: string;
  position: string;
  photoName: string;
}

// 新增团队成员接口类型
export interface AddTeamMemberInfo {
  id: string; // 成员ID
  teamId: string; // 团队ID
  name: string; // 成员姓名
  role: string; // 成员角色：1 队长 2 副队长 3 成员
  phone: string; // 成员联系方式
  email: string; // 成员邮箱
  position: string; // 成员职位
  photoName: string; // 证件照片名称
  code: string; // 验证码
}

// 团队完整信息类型
export interface TeamFullInfo {
  no: number;
  id: string;
  groupId: string;
  compId: string;
  compName: string;
  name: string;
  type: string;
  organName: string;
  provinceCity: string;
  province?: string;
  city: string;
  img: string;
  transactionPerson: string;
  captain: string;
  memberCount: number;
  creator: string;
  createTime: string;
  members: TeamMemberInfo[];
}

// 团队列表查询参数类型
export interface TeamListQueryParams {
  compId: string;
  curPage: number;
  pageSize: number;
  id?: string; // 可选的团队ID，用于查询指定团队
}

/**
 * 查询团队及成员信息
 */
export async function getTeamInfoAndMembersListApi(params: TeamListQueryParams): Promise<{ data: TeamFullInfo[], pageInfo: { totalRows: number, curPage: number, pageSize: number } }> {
  return requestClient.get('/match/get-team-info-and-members-list', { params });
}

/**
 * 删除团队成员
 */
export async function deleteTeamMemberApi(id: string): Promise<any> {
  return requestClient.delete(`/match/delete-team-member/${id}`);
}

/**
 * 删除团队信息
 */
export async function deleteTeamInfoApi(id: string): Promise<any> {
  return requestClient.delete(`/match/delete-team-info/${id}`);
}

// 修改团队成员接口类型
export interface UpdateTeamMemberInfo {
  id: string; // 成员ID
  teamId: string; // 团队ID
  name: string; // 成员姓名
  role: string; // 成员角色：1 队长 2 副队长 3 成员
  phone: string; // 成员联系方式
  email: string; // 成员邮箱
  position: string; // 成员职位
  photoName: string; // 证件照片名称
  code: string; // 验证码
}

/**
 * 修改团队成员信息
 */
export async function updateTeamMemberApi(data: UpdateTeamMemberInfo): Promise<any> {
  return requestClient.post('/match/update-team-member', data);
}

// 大赛协议类型
export interface EduMatchAgreementVO {
  id: string;
  matchId: string;
  agreementContent: string;
  agreementName: string;
  status: number;
  lastEditId: string;
}

// 查询大赛协议参数类型
export interface QueryMatchAgreementParams {
  matchId: string;
}

/**
 * 查询大赛协议
 */
export async function queryMatchAgreementApi(params: QueryMatchAgreementParams): Promise<EduMatchAgreementVO> {
  return requestClient.get('/match/query-match-agreement-by-condition', { params });
}



// 查询报名信息参数类型
export interface GetRegistrationInfoParams {
  compId: string; // 大赛ID（必传）
}

// 查询报名信息响应类型
export interface GetRegistrationInfoResponse {
  status: number;
  message: string;
  data: EduRegWorksVO[];
  timestamp: number;
}

/**
 * 获取报名信息
 */
export async function getUserRegistrationInfoApi(params: GetRegistrationInfoParams): Promise<any> {
  return requestClient.get('/match/user/get-registration-info', { params });
}

/**
 * 更新报名信息
 */
export async function updateRegistrationInfoApi(data: EduRegWorksVO): Promise<any> {
  return requestClient.patch('/match/user/update-registration-info', data);
}
/**
 * 提交作品
 */
export async function submitWorksApi(data: EduRegWorksVO): Promise<any> {
  return requestClient.patch('/match/user/submit-works', data);
}
